package com.guigu.basedservice.controller;

import com.alibaba.excel.EasyExcel;
import com.guigu.basedservice.entity.BasePartsType;
import com.guigu.basedservice.mapper.BasePartsTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author heyuhang
 * @create 2024/9/28
 */
@CrossOrigin
@RestController
public class FileUploadController {

    @Autowired(required = false)
    private BasePartsTypeMapper basePartsTypeMapper;

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败，请选择文件";
        }
        String filePath = "D:\\S4项目小组";
        // 获取上传的文件名，并保存到指定路径
        String fileName = file.getOriginalFilename();
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);  // 保存文件到指定路径
            return "文件上传成功: " + fileName;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "文件上传失败";
    }

//    @PostMapping("/write")
//    public String writeExcel(@RequestParam("file") MultipartFile file) {
//        System.out.println("file++++"+file);
//        if (file.isEmpty()) {
//            return "上传失败，请选择文件";
//        }
//
//        // 获取用户提供的文件路径（这里使用文件名作为 Excel 文件名）
//        String filePath = "D:\\S4项目小组\\" + file.getOriginalFilename().replace(".txt", ".xlsx"); // 假设用户上传的是 .txt 文件
//        // 创建文件对象
//        File dest = new File(filePath);
//        try {
//            // 先将上传的文件保存到指定路径
//            file.transferTo(dest);
//
//            // 使用 EasyExcel 写入数据到 Excel 文件
//            EasyExcel.write(filePath, BasePartsType.class)
//                    .sheet("模板")
//                    .doWrite(data());
//
//            return "写入成功, 文件路径: " + filePath;
//        } catch (IOException e) {
//            e.printStackTrace();
//            return "文件写入失败: " + e.getMessage();
//        }
//    }

    @PostMapping("/write")
    public String writeExcel(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败，请选择文件";
        }

        // 使用相对路径或安全的临时路径
        String directoryPath = "D:\\";
        // 使用 File.separator 自动适配操作系统路径分隔符
//        String directoryPath = "D:" + File.separator;
//        String directoryPath = "D:/S4项目小组/";

        // 检查并创建目标目录
        File directory = new File(directoryPath);
        if (!directory.exists()) {
            boolean isDirCreated = directory.mkdirs();
            if (!isDirCreated) {
                return "目录创建失败，请检查路径或权限: " + directoryPath;
            }
        }

        String filePath = directoryPath + file.getOriginalFilename().replace(".txt", ".xlsx");

        File dest = new File(filePath);

        try {
            // 保存上传的文件到指定路径
            file.transferTo(dest);

            // 使用 EasyExcel 写入 Excel 文件
            EasyExcel.write(filePath, BasePartsType.class)
                    .sheet("模板")
                    .doWrite(data());

            return "写入成功, 文件路径: " + filePath;
        } catch (IOException e) {
            System.err.println("文件路径:++++ " + filePath);
            e.printStackTrace();
            return "文件写入失败，异常信息: " + e.getMessage();
        }
    }


    private List<BasePartsType> data() {
        return basePartsTypeMapper.queryAll();
    }
}
